package com.wanxi.order.service;




import com.wanxi.domain.code.ResultCode;
import com.wanxi.domain.dto.OrderStatus;
import com.wanxi.domain.vo.OrderQueryVO;
import com.wanxi.domain.vo.OrderVO;
import com.wanxi.domain.vo.PlaceOrderVO;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;
import java.util.Map;

/**
 * @Author LiuYuRong
 * @Date 2022/1/4 9:35
 * @Version 1.0
 * @Description
 */

/**
 * 视作原子服务
 */
public interface OrderService {
    /**
     * 支付订单，需要调用支付接口，并返回是否支付成功的提示
     * @param id 订单编号
     * @return 是否支付成功
     */
    int payOrder(long id);

    /**
     * 根据传过来的roleId自动判断用户类型（用户，店家，商家，平台）来返回
     * 0——>用户 查看这个用户的订单
     * 1——>店家 查看这个店家的订单
     * 2商家 查看商家（企业）所属店家的所有订单
     * 3平台 查看所有订单
     * @param roleId  角色id，可以是用户的，商家的，店家的，平台的（平台可以）
     * @param queryVO 查询条件
     * @return 如果不指定分页，自动返回最开始的十条数据
     */
    List<OrderVO> getOrders(long roleId, int role, OrderQueryVO queryVO);

    /**
     * 添加一个订单
     * @param order 订单VO实体表
     * @return 是否下单成功
     */
    int addOrder( PlaceOrderVO order);

    /**
     * 改变订单状态
     * 0 下单
     * 1 付款
     * 2 发货
     * 3 收货
     * 4 超时自动取消订单
     * 5 用户手动取消订单
     * 0->1->2->3
     * |
     * 4 5
     * 必须遵循以上的状态流转
     * @param orderId 订单id
     * @param status 状态
     * @return 是否成功的状态码
     */

    ResultCode changeOrderStatus(long orderId, OrderStatus status);





    /**
     * 删除订单，只是逻辑删除，将订单is_delete状态置为1
     * @param orderId 订单id
     * @return 是否删除成功
     */
    ResultCode deleteOrder(long orderId);

    /**
     * 需要在确认订单前调用这个方法计算出订单实际付款
     * @param orderVO 订单视图
     * @return 计算好的金额，key为amount
     */
    Map<String,Object> beforeSubmitOrder(PlaceOrderVO orderVO);
}
